package com.leo;

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.input.*;
import javafx.scene.text.Font;
import javafx.stage.Stage;

/**
 * @ClassName ButtonShortcutsDemo
 * @Description 设置快捷键
 * @Author wangss
 * @date 2020.05.16 23:36
 * @Version 1.0
 */
public class ButtonShortcutsDemo extends Application {

    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage primaryStage) throws Exception {
        final Button button = new Button();
        button.setText("这是按钮");

        // 设置按钮在group中的xy位置
        button.setLayoutX(10d);
        button.setLayoutY(10d);

        // 设置按钮的大小
        button.setPrefHeight(50d);
        button.setPrefWidth(200d);

        // 设置button的字体
        button.setFont(Font.font(30d));

        button.setOnAction(new EventHandler<ActionEvent>() {
            @Override
            public void handle(ActionEvent event) {
                System.out.println("触发按钮事件");
            }
        });

        final Group group = new Group();
        // 增加组件
        group.getChildren().addAll(button);

        Scene scene = new Scene(group);

        // 第一种快捷键设置  组合使用   不同平台容易出问题
        KeyCombination kc = new KeyCodeCombination(KeyCode.C, KeyCombination.ALT_DOWN);
        Mnemonic mnemonic = new Mnemonic(button, kc);
        scene.addMnemonic(mnemonic);

        // 第二种
        KeyCombination kc1 = new KeyCharacterCombination("O", KeyCombination.ALT_DOWN);
        Mnemonic mnemonic1 = new Mnemonic(button, kc1);
        scene.addMnemonic(mnemonic1);

        // 第三种  常用  注意new KeyCodeCombination中第二个参数只能设置一个，否则不起作用  KeyCombination.SHORTCUT_DOWN 这是跨平台的写法
        KeyCombination kc3 = new KeyCodeCombination(KeyCode.Q, KeyCombination.SHORTCUT_DOWN);
        scene.getAccelerators().put(kc3, new Runnable() {
            @Override
            public void run() {
                System.out.println("运行run方法" + Thread.currentThread().getName());
            }
        });

        primaryStage.setScene(scene);
        primaryStage.setTitle("button");
        primaryStage.setWidth(500d);
        primaryStage.setHeight(500d);
        primaryStage.show();
    }
}
